PM_FUNC_NORM_ATTRIB SKILL:SkillCounter( SKILL_CALL:iCall, Int:id )
{
	switch( iCall )
	{
		case CALL_REGISTER: return SkillRegister( .Name = "Counter", .Type = TYPE_FIGHTING, .callTypes = CALL_TAKE_DAMAGE|CALL_GIVE_DAMAGE, .PP = 20, .Charges = 5, .DelayTime = 5.0 );
		case CALL_HELP:     return SkillHelp( "Extra damage against the last person to attack you" );
		case CALL_TAKE_DAMAGE:
		{
			gSkillVariable[ id ] = g_iAttacker;
			return SKILL_READY;
		}
		case CALL_GIVE_DAMAGE:
		{
			if ( g_iVictim == gSkillVariable[ id ] )
			{
				new Int:iDamage = StatClamp( id, STAT_ATTACK, 10, 20 );

				SkillDamage( .victim = g_iVictim,
							.attacker = id,
							.damage = iDamage
							);

				SoundEmit( id, SOUND_TU_FIRE );

				return SKILL_USED;
			}
		}
	}
	return SKILL_READY;
}

PM_FUNC_NORM_ATTRIB SKILL:SkillDoubleKick( SKILL_CALL:iCall, Int:id )
{
	#pragma unused id
	switch( iCall )
	{
		case CALL_REGISTER: return SkillRegister( .Name = "Double Kick", .Type = TYPE_FIGHTING, .callTypes = CALL_BIND_DOWN, .PP = 30, .Charges = 1, .DelayTime = 1.0 );
		case CALL_HELP:     return SkillHelp( "Pokemon attacks twice." );
		case CALL_BIND_DOWN:
		{
			return SKILL_USED;
		}
	}
	return SKILL_READY;
}

PM_FUNC_NORM_ATTRIB SKILL:SkillHiJumpKick( SKILL_CALL:iCall, Int:id )
{
	#pragma unused id
	switch( iCall )
	{
		case CALL_REGISTER: return SkillRegister( .Name = "Hi Jump Kick", .Type = TYPE_FIGHTING, .callTypes = CALL_BIND_DOWN, .PP = 20, .Charges = 1, .DelayTime = 1.0 );
		case CALL_HELP:     return SkillHelp( "If Pokemon misses, it takes 1/8 the damage it would have caused." );
		case CALL_BIND_DOWN:
		{
			return SKILL_USED;
		}
	}
	return SKILL_READY;
}

PM_FUNC_NORM_ATTRIB SKILL:SkillJumpKick( SKILL_CALL:iCall, Int:id )
{
	#pragma unused id
	switch( iCall )
	{
		case CALL_REGISTER: return SkillRegister( .Name = "Jump Kick", .Type = TYPE_FIGHTING, .callTypes = CALL_BIND_DOWN, .PP = 25, .Charges = 1, .DelayTime = 1.0 );
		case CALL_HELP:     return SkillHelp( "If Pokemon misses, it takes 1/8 the damage it would have caused." );
		case CALL_BIND_DOWN:
		{
			return SKILL_USED;
		}
	}
	return SKILL_READY;
}

PM_FUNC_NORM_ATTRIB SKILL:SkillLowKick( SKILL_CALL:iCall, Int:id )
{
	#pragma unused id
	switch( iCall )
	{
		case CALL_REGISTER: return SkillRegister( .Name = "Low Kick", .Type = TYPE_FIGHTING, .callTypes = CALL_BIND_DOWN, .PP = 20, .Charges = 1, .DelayTime = 1.0 );
		case CALL_HELP:     return SkillHelp( "Damages." );
		case CALL_BIND_DOWN:
		{
			return SKILL_USED;
		}
	}
	return SKILL_READY;
}

PM_FUNC_NORM_ATTRIB SKILL:SkillRollingKick( SKILL_CALL:iCall, Int:id )
{
	#pragma unused id
	switch( iCall )
	{
		case CALL_REGISTER: return SkillRegister( .Name = "Rolling Kick", .Type = TYPE_FIGHTING, .callTypes = CALL_BIND_DOWN, .PP = 15, .Charges = 1, .DelayTime = 1.0 );
		case CALL_HELP:     return SkillHelp( "Damages." );
		case CALL_BIND_DOWN:
		{
			return SKILL_USED;
		}
	}
	return SKILL_READY;
}

PM_FUNC_NORM_ATTRIB SKILL:SkillSeismicToss( SKILL_CALL:iCall, Int:id )
{
	switch( iCall )
	{
		case CALL_REGISTER: return SkillRegister( .Name = "Seismic Toss", .Type = TYPE_FIGHTING, .callTypes = CALL_AIM_AT_PLAYER, .PP = 20, .Charges = 3, .DelayTime = 7.5 );
		case CALL_HELP:     return SkillHelp( "Look at players to throw them." );
		case CALL_AIM_AT_PLAYER:
		{
			if ( is_user_alive( g_iVictim ) )
			{
				new Vector:vVelocity[3];
				new Float:fThrow = StatClamp( id, STAT_SPECIAL, 500.0, 1500.0 );
				velocity_by_aim( id, floatround( fThrow ), vVelocity );
				vVelocity[ 2 ] = fThrow;
				EntitySetVelocity( g_iVictim, vVelocity );

				SoundEmit( id, SOUND_TU_FIRE );

				return SKILL_USED;
			}
		}
	}
	return SKILL_READY;
}

PM_FUNC_NORM_ATTRIB SKILL:SkillSubmission( SKILL_CALL:iCall, Int:id )
{
	switch( iCall )
	{
		case CALL_REGISTER: return SkillRegister( .Name = "Submission", .Type = TYPE_FIGHTING, .callTypes = CALL_GIVE_DAMAGE, .PP = 20, .Charges = 1, .DelayTime = 1.0 );
		case CALL_HELP:     return SkillHelp( "Extra damage but receive 1/4 recoil damage." );
		case CALL_GIVE_DAMAGE:
		{
			new Float:fExtraDamage = StatClamp( id, STAT_ATTACK, g_fDamage * 0.33, g_fDamage * 0.66 );
			new Float:fDamageTake = fExtraDamage * 0.25;

			SkillDamage( .victim = g_iVictim,
						.attacker = id,
						.damage = floatround( fExtraDamage )
						);

			SkillDamage( .victim = id,
						.attacker = id,
						.damage = floatround( fDamageTake )
						);

			SoundHit( id );
			SoundHit( g_iVictim );

			return SKILL_USED;
		}
	}
	return SKILL_READY;
}





